﻿<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 23.0.1.0 for Windows">
<title>Tera計算EIQAI ソフトウェア フロー説明</title>
<style>
<!--
  body{
	font-family: "Meiryo", "MS UI Gothic", sans-serif; margin: 30px; background: #f8f9fa; color: #333; line-height: 1.7;
}
  h1{
	text-align: center; color: #1a5276; border-bottom: 3px solid #1a5276; padding-bottom: 10px;
}
  h2{
	color: #2c3e50; border-left: 5px solid #2980b9; padding-left: 12px; margin-top: 40px;
}
  h3{
	color: #34495e; margin-top: 25px;
}
  .section{
	background: #fff; border: 1px solid #ddd; border-radius: 8px; padding: 20px; margin: 15px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}
  table{
	border-collapse: collapse; margin: 15px 0; width: auto;
}
  th, td{
	border: 1px solid #999; padding: 6px 14px; text-align: center; font-size: 14px;
}
  th{
	background: #2c3e50; color: #fff;
}
  td{
	background: #fff;
}
  tr.total td{
	background: #eaf2f8; font-weight: bold;
}
  .flow{
	text-align: center; margin: 20px 0;
}
  .flow-box{
	display: inline-block; background: #2980b9; color: #fff; padding: 10px 22px; border-radius: 8px; margin: 5px; font-weight: bold; min-width: 200px;
}
  .flow-box.green{
	background: #27ae60;
}
  .flow-box.orange{
	background: #e67e22;
}
  .flow-box.purple{
	background: #8e44ad;
}
  .flow-arrow{
	display: block; font-size: 24px; color: #666; margin: 2px 0;
}
  .flow-branch{
	display: flex; justify-content: center; gap: 15px; margin: 8px 0;
}
  code{
	background: #eef; padding: 2px 6px; border-radius: 3px; font-family: "Consolas", monospace; font-size: 13px;
}
  .ctrl-table td:first-child{
	text-align: left; font-weight: bold; white-space: nowrap;
}
  .ctrl-table td:nth-child(2){
	text-align: left;
}
  ul{
	margin: 5px 0 5px 20px;
}
  .note{
	background: #fef9e7; border-left: 4px solid #f1c40f; padding: 10px 15px; margin: 10px 0; font-size: 14px;
}
-->
</style>
</head>
<body>

<h1>Tera計算EIQAI ソフトウェア フロー説明</h1>

<!-- ===== 概要 ===== -->
<div class="section">
<h2>概要</h2>
<p>
出荷先数とアイテム数を入力し、学習済み <strong>ML.NET</strong> モデルによるAI予測を実行して
<strong>EIQ分析</strong>（マトリクス表・従来計算表）を表示する Windows フォームアプリケーション。
</p>
</div>

<!-- ===== 全体フロー ===== -->
<div class="section">
<h2>全体フロー</h2>

<div class="flow">
  <div class="flow-box">アプリ起動（フォームロード）</div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box">初期化処理<br><small>MLContext / モデル読込 / Dgv初期化</small></div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box green">ユーザー入力<br><small>出荷先数・アイテム数</small></div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box orange">予測実行Bt クリック</div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box">予測実行()<br><small>全モデルで Predict → 予測結果Dgv 表示</small></div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box orange">EIQマトリクス表実行Bt クリック</div>
  <span class="flow-arrow">▼</span>
  <div class="flow-branch">
    <div class="flow-box purple">マトリクス表作成</div>
    <div class="flow-box purple">従来計算E作成</div>
    <div class="flow-box purple">従来計算I作成</div>
  </div>
  <span class="flow-arrow">▼</span>
  <div class="flow-box green">表示単位ラジオボタン切替<br><small>出庫回数/バラ/ケース/PL/容積/重量 → マトリクス再描画</small></div>
</div>
</div>

<!-- ===== 各処理の詳細 ===== -->
<div class="section">
<h2>各処理の詳細</h2>

<h3>【1】フォームロード（Tera計算EIQAI_Load）</h3>
<ul>
  <li><code>ファイル確認()</code> を呼び出し</li>
  <li><code>MLContext(seed:=0)</code> を初期化</li>
  <li>モデル保存Path のフォルダ存在確認</li>
  <li><code>出力フィールド名リスト初期化()</code>:
    <ul>
      <li>バラ数量, 行数, E1-E5, I1-I5</li>
      <li>行数01-25, バラ数01-25, ケース01-25, PL01-25, 容積01-25, 重量01-25</li>
      <li>合計 162 フィールド</li>
    </ul>
  </li>
  <li><code>学習済モデル読込()</code>: フォルダ内の全 .zip ファイルを ITransformer として読込</li>
  <li><code>AI予測EIQマトリクス表Dgv初期化()</code>: 7列×5行のマトリクス表ヘッダー設定</li>
</ul>

<h3>【2】予測実行（予測実行Bt_Click → 予測実行()）</h3>
<ul>
  <li>出荷先数Tb, アイテム数Tb の入力値を検証</li>
  <li><code>InputData</code>（出荷先数, アイテム数）を作成</li>
  <li>全学習済モデルに対して <code>CreatePredictionEngine → Predict</code> を実行</li>
  <li>予測結果を <code>Dictionary(Of String, Single)</code> に格納</li>
  <li><code>予測結果表示()</code>: DataTable に変換し予測結果Dgv にバインド</li>
</ul>

<h3>【3】EIQマトリクス表作成（AI予測EIQマトリクス表()）</h3>
<ul>
  <li>予測結果Dgv から辞書(pred)にキャッシュ（キー:項目名, 値:四捨五入整数）</li>
  <li>表示単位ラジオボタンに応じてプレフィックスを決定</li>
  <li>抽出テキストボックスに I1-I5, E1-E5 と各合計を設定</li>
  <li>AI予測EIQマトリクス表Dgv に 5×5 = 25 セルの値を埋込</li>
  <li>横計（各行合計）、縦計（各列合計）、総合計を計算・表示</li>
</ul>

<table>
  <tr><th>GPLEランク</th><th>GPLI_A1</th><th>GPLI_A2</th><th>GPLI_B</th><th>GPLI_C</th><th>GPLI_D</th><th>横計</th></tr>
  <tr><td>GPLE_A1</td><td>XX01</td><td>XX02</td><td>XX03</td><td>XX04</td><td>XX05</td><td>Σ行</td></tr>
  <tr><td>GPLE_A2</td><td>XX06</td><td>XX07</td><td>XX08</td><td>XX09</td><td>XX10</td><td>Σ行</td></tr>
  <tr><td>GPLE_B</td><td>XX11</td><td>XX12</td><td>XX13</td><td>XX14</td><td>XX15</td><td>Σ行</td></tr>
  <tr><td>GPLE_C</td><td>XX16</td><td>XX17</td><td>XX18</td><td>XX19</td><td>XX20</td><td>Σ行</td></tr>
  <tr><td>GPLE_D</td><td>XX21</td><td>XX22</td><td>XX23</td><td>XX24</td><td>XX25</td><td>Σ行</td></tr>
  <tr class="total"><td>縦計</td><td>Σ列</td><td>Σ列</td><td>Σ列</td><td>Σ列</td><td>Σ列</td><td>総計</td></tr>
</table>
<div class="note">※ XX = 選択中の表示単位プレフィックス（行数 / バラ数 / ケース / PL / 容積 / 重量）</div>

<h3>【4】従来計算E（AI予測従来計算E()）</h3>
<ul>
  <li><code>AI予測従来計算出荷先Dgv</code> に 9 列を設定</li>
  <li>GPLEランク（E1-E5）ごとに 1 行: 行方向合計</li>
  <li>最下行に合計行</li>
</ul>

<table>
  <tr><th>出荷日</th><th>ランク</th><th>出荷先数</th><th>出荷回数</th><th>バラ数</th><th>ケース換算</th><th>PL換算</th><th>容積換算</th><th>重量換算</th></tr>
  <tr><td>全データ平均</td><td>GPLE_A1</td><td>E1</td><td>Σ行数01-05</td><td>Σバラ数01-05</td><td>Σケース01-05</td><td>ΣPL01-05</td><td>Σ容積01-05</td><td>Σ重量01-05</td></tr>
  <tr><td>全データ平均</td><td>GPLE_A2</td><td>E2</td><td>Σ行数06-10</td><td>Σバラ数06-10</td><td>Σケース06-10</td><td>ΣPL06-10</td><td>Σ容積06-10</td><td>Σ重量06-10</td></tr>
  <tr><td>全データ平均</td><td>GPLE_B</td><td>E3</td><td>Σ行数11-15</td><td>Σバラ数11-15</td><td>Σケース11-15</td><td>ΣPL11-15</td><td>Σ容積11-15</td><td>Σ重量11-15</td></tr>
  <tr><td>全データ平均</td><td>GPLE_C</td><td>E4</td><td>Σ行数16-20</td><td>Σバラ数16-20</td><td>Σケース16-20</td><td>ΣPL16-20</td><td>Σ容積16-20</td><td>Σ重量16-20</td></tr>
  <tr><td>全データ平均</td><td>GPLE_D</td><td>E5</td><td>Σ行数21-25</td><td>Σバラ数21-25</td><td>Σケース21-25</td><td>ΣPL21-25</td><td>Σ容積21-25</td><td>Σ重量21-25</td></tr>
  <tr class="total"><td></td><td>計</td><td>ΣE</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td></tr>
</table>

<h3>【5】従来計算I（AI予測従来計算I()）</h3>
<ul>
  <li><code>AI予測従来計算アイテムDgv</code> に 9 列を設定</li>
  <li>GPLIランク（I1-I5）ごとに 1 行: 列方向合計</li>
  <li>最下行に合計行</li>
</ul>

<table>
  <tr><th>出荷日</th><th>ランク</th><th>アイテム数</th><th>出荷回数</th><th>バラ数</th><th>ケース換算</th><th>PL換算</th><th>容積換算</th><th>重量換算</th></tr>
  <tr><td>全データ平均</td><td>GPLI_A1</td><td>I1</td><td>Σ行数 col1</td><td>Σバラ数 col1</td><td>Σケース col1</td><td>ΣPL col1</td><td>Σ容積 col1</td><td>Σ重量 col1</td></tr>
  <tr><td>全データ平均</td><td>GPLI_A2</td><td>I2</td><td>Σ行数 col2</td><td>Σバラ数 col2</td><td>Σケース col2</td><td>ΣPL col2</td><td>Σ容積 col2</td><td>Σ重量 col2</td></tr>
  <tr><td>全データ平均</td><td>GPLI_B</td><td>I3</td><td>Σ行数 col3</td><td>Σバラ数 col3</td><td>Σケース col3</td><td>ΣPL col3</td><td>Σ容積 col3</td><td>Σ重量 col3</td></tr>
  <tr><td>全データ平均</td><td>GPLI_C</td><td>I4</td><td>Σ行数 col4</td><td>Σバラ数 col4</td><td>Σケース col4</td><td>ΣPL col4</td><td>Σ容積 col4</td><td>Σ重量 col4</td></tr>
  <tr><td>全データ平均</td><td>GPLI_D</td><td>I5</td><td>Σ行数 col5</td><td>Σバラ数 col5</td><td>Σケース col5</td><td>ΣPL col5</td><td>Σ容積 col5</td><td>Σ重量 col5</td></tr>
  <tr class="total"><td></td><td>縦計</td><td>ΣI</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td><td>Σ全</td></tr>
</table>
<div class="note">
  列方向の合計: GPLI_A1 = XX01+XX06+XX11+XX16+XX21, GPLI_A2 = XX02+XX07+XX12+XX17+XX22, …
</div>

<h3>【6】表示単位切替（抽出_表示単位_CheckedChanged）</h3>
<ul>
  <li><code>matrixActive = True</code> の場合のみ動作</li>
  <li><code>AI予測EIQマトリクス表()</code> を再実行してマトリクス表を更新</li>
  <li>選択可能な単位: 出庫回数 / バラ / ケース / PL / 容積 / 重量</li>
</ul>

<h3>【7】結果エクスポート（結果エクスポートBt_Click）</h3>
<ul>
  <li>予測結果Dgv のデータを CSV ファイルに出力</li>
  <li>ファイル名: <code>予測結果_yyyyMMdd_HHmmss.csv</code></li>
  <li>先頭行に入力条件（出荷先数, アイテム数）をコメントとして記載</li>
</ul>

<h3>【8】学習済モデル再読込（学習済モデル読込Bt_Click）</h3>
<ul>
  <li>モデルフォルダ内の .zip ファイルを再スキャンして読込</li>
</ul>
</div>

<!-- ===== データ構造 ===== -->
<div class="section">
<h2>データ構造</h2>
<table>
  <tr><th>クラス名</th><th>用途</th><th>主なフィールド</th></tr>
  <tr><td>ModelData</td><td>学習データ構造</td><td>モデル連番, 出荷先数, アイテム数, バラ数量, 行数, E1-E5, I1-I5, 行数01-25 等</td></tr>
  <tr><td>InputData</td><td>予測入力</td><td>出荷先数, アイテム数</td></tr>
  <tr><td>SinglePrediction</td><td>予測出力</td><td>Score</td></tr>
</table>
</div>

<!-- ===== 主要コントロール ===== -->
<div class="section">
<h2>主要コントロール一覧</h2>

<h3>入力</h3>
<table class="ctrl-table">
  <tr><th>コントロール</th><th>説明</th></tr>
  <tr><td>出荷先数Tb</td><td>出荷先数入力テキストボックス</td></tr>
  <tr><td>アイテム数Tb</td><td>アイテム数入力テキストボックス</td></tr>
</table>

<h3>ボタン</h3>
<table class="ctrl-table">
  <tr><th>コントロール</th><th>説明</th></tr>
  <tr><td>学習済モデル読込Bt</td><td>モデル再読込</td></tr>
  <tr><td>予測実行Bt</td><td>AI予測実行</td></tr>
  <tr><td>EIQマトリクス表実行Bt</td><td>マトリクス表・従来計算表の生成</td></tr>
  <tr><td>結果エクスポートBt</td><td>CSV出力</td></tr>
  <tr><td>閉じるBt</td><td>フォームを閉じる</td></tr>
</table>

<h3>表示単位ラジオボタン</h3>
<table class="ctrl-table">
  <tr><th>コントロール</th><th>プレフィックス</th></tr>
  <tr><td>抽出_出庫回数Rb</td><td>行数</td></tr>
  <tr><td>抽出_バラRb</td><td>バラ数</td></tr>
  <tr><td>抽出_ケースRb</td><td>ケース</td></tr>
  <tr><td>抽出_PLRb</td><td>PL</td></tr>
  <tr><td>抽出_容積Rb</td><td>容積</td></tr>
  <tr><td>抽出_重量Rb</td><td>重量</td></tr>
</table>

<h3>DataGridView</h3>
<table class="ctrl-table">
  <tr><th>コントロール</th><th>説明</th></tr>
  <tr><td>予測結果Dgv</td><td>全予測結果一覧（項目名 / 予測値）</td></tr>
  <tr><td>AI予測EIQマトリクス表Dgv</td><td>5×5 EIQマトリクス表 + 横計/縦計</td></tr>
  <tr><td>AI予測従来計算出荷先Dgv</td><td>従来計算E（出荷先ランク別集計）</td></tr>
  <tr><td>AI予測従来計算アイテムDgv</td><td>従来計算I（アイテムランク別集計）</td></tr>
</table>

<h3>抽出テキストボックス</h3>
<table class="ctrl-table">
  <tr><th>コントロール</th><th>対応値</th></tr>
  <tr><td>抽出E_A1Tb 〜 抽出E_DTb</td><td>E1 〜 E5</td></tr>
  <tr><td>抽出E_計Tb</td><td>E1〜E5 の合計</td></tr>
  <tr><td>抽出I_A1Tb 〜 抽出I_DTb</td><td>I1 〜 I5</td></tr>
  <tr><td>抽出I_計Tb</td><td>I1〜I5 の合計</td></tr>
</table>
</div>

<!-- ===== ヘルパー関数 ===== -->
<div class="section">
<h2>ヘルパー関数</h2>
<table class="ctrl-table">
  <tr><th>関数</th><th>説明</th></tr>
  <tr><td><code>ToRoundedString(s)</code></td><td>文字列を数値変換し四捨五入して整数文字列を返す</td></tr>
  <tr><td><code>ToLongOrZero(s)</code></td><td>文字列を Long に変換（失敗時は 0）</td></tr>
</table>
</div>

</body>
</html>
